import axios from "axios";
import { ElMessage } from 'element-plus'

const server = axios.create({
    baseURL:'/api',
    timeout:600000
})

// 请求拦截器
server.interceptors.request.use(
    config => {
        // 添加token到请求头
        const token = localStorage.getItem('token')
        if (token) {
            config.headers.Authorization = `Bearer ${token}`
        }
        
        // 添加用户名到请求头（用于后端识别当前用户，用于流程审批）
        const userInfo = localStorage.getItem('userInfo')
        if (userInfo) {
            try {
                const user = JSON.parse(userInfo)
                config.headers['X-User-Name'] = user.username
            } catch (e) {
                console.error('解析用户信息失败', e)
            }
        }
        
        return config
    },
    error => {
        return Promise.reject(error)
    }
)

// 响应拦截器
server.interceptors.response.use(
    response => {
        return response.data
    },
    error => {
        if (error.response) {
            const { status, data } = error.response
            if (status === 401) {
                // token过期，清除本地存储并跳转到登录页
                localStorage.removeItem('token')
                localStorage.removeItem('userInfo')
                ElMessage.error('登录已过期，请重新登录')
                window.location.href = '/login'
            } else if (status === 403) {
                ElMessage.error('没有权限访问该资源')
            } else if (status === 500) {
                ElMessage.error(data?.message || '服务器内部错误')
            } else if (status === 404) {
                ElMessage.error('请求的资源不存在')
            } else {
                ElMessage.error(data?.message || '请求失败')
            }
        } else {
            ElMessage.error('网络错误，请检查网络连接')
        }
        return Promise.reject(error)
    }
)

export default server